home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Presentations / Presentations ’97 / Sessions ’97 / Multiplatform Code⁄Data Sharing / HelloBothWorlds / GE / LibHdr / paths.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-29  |  2.3 KB  |  96 lines  |  [TEXT/CWIE]

  1. /*
  2.     Paths.h
  3.     
  4.     Paths routines for Graphic Elements
  5.     
  6.     Copyright 1993 by Al Evans
  7.     
  8.     11/10/93
  9.     
  10. */
  11.  
  12. /*
  13.     A simple path system for programmed animation. A PathRec contains a
  14.     pointer to a sequence of PathEntries and fields to hold the results
  15.     of processing those PathEntries.
  16.     
  17.     The FrameSeqGraphic which uses paths calls InitPath to initialize
  18.     the PathRec, then calls GetNextStep during its AutoChangeProc update
  19.     its PathRec. On return from GetNextStep, it changes frames if 
  20.     PathRec.currFrame is non-zero and moves if PathRec.currXMove or
  21.     PathRec.currYMove is non-zero.
  22.     
  23.     Each PathEntry is one step in the path. Each PathEntry has a command,
  24.     a parameter, and x value, and a y value. Their effects on the fields
  25.     of the PathRec depend on the command:
  26.         
  27.         absMotionCmd: 
  28.                 PathRec.currFrame = param;
  29.                 PathRec.currXMove = xVal;
  30.                 PathRec.currYMove = yVal;
  31.         
  32.         relMotionCmd:
  33.                 PathRec.currFrame = param;
  34.                 PathRec.currXMove += xVal;
  35.                 PathRec.currYMove += yVal;
  36.                 
  37.     Paths can also contain control commands:
  38.     
  39.         gotoCmd:
  40.                 Reset the current step in the path to (param) and
  41.                 process the PathEntry found there.
  42.         resetCmd:
  43.                 Reset the current step in the path to zero. Must
  44.                 be included as the last step in each path.
  45.         repeatCmd:
  46.                 Only meaningful before a relMotionCmd. Causes the
  47.                 next command to be repeated (param) times. If this
  48.                 command includes a frame change, the frame is changed
  49.                 only on the first execution.
  50. */
  51.  
  52. typedef struct {
  53.     signed char        command;
  54.     unsigned char    param;
  55.     signed char        xVal;
  56.     signed char        yVal;
  57. }    PathEntry, *PathEntryPtr;
  58.  
  59. typedef struct {
  60.     short            currStep;
  61.     short            currFrame;
  62.     short            currXMove;
  63.     short            currYMove;
  64.     short            count;
  65.     short            sp;
  66.     short            stack[16];
  67.     PathEntryPtr    path;
  68. } PathRec, *PathRecPtr;
  69.  
  70. typedef enum {
  71.         absMotionCmd    =     (signed char) 0x20,
  72.         relMotionCmd    =    (signed char) 0x21,
  73.         //commands < 0 manipulate path pointer
  74.         repeatCmd        =    (signed char)(short)0xFFD1,
  75.         goToCmd            =    (signed char)(short)0xFFE0,
  76.         goSubCmd        =    (signed char)(short)0xFFE1,
  77.         returnCmd        =    (signed char)(short)0xFFE2,
  78.         resetCmd        =    (signed char)(short)0xFFFF
  79. } PathCommand;
  80.     
  81. #ifdef __cplusplus
  82. extern "C" {
  83. #endif
  84.  
  85. void InitPath(PathRecPtr path);
  86.  
  87. void GetNextStep(PathRecPtr path);
  88.  
  89. void DoPathGoTo(PathRecPtr path, short gotoStep);
  90.  
  91. void DoPathGoSub(PathRecPtr path, short subRtnStep);
  92.  
  93. #ifdef __cplusplus
  94. }
  95. #endif
  96.